package com.cskaoyan.javase.overload._1basic;
/**
 * 方法调用时,方法的实参数据类型不需要和形参数据类型完全保持一致
 * 只需要保持"兼容"即可
 * 兼容: 实参数据类型 自动类型转换 到形参数据类型
 *
 * 就近原则: 是Java程序编译时的一种语法设计,当出现多个选项都能够匹配的时候
 *      那么优先选择"最近的"
 *
 * 什么叫"最近的"呢?
 *      不同的场景下,"最近的"概念是不同的,依据是不同的
 *      你需要找到一个合理的依据,来确定谁最近
 *
 * 以重载中的方法调用来说,如果多个方法都能够匹配,那么说明在这个匹配过程中必然出现了自动类型转换,取值范围由小到大
 * 在这个过程中,转换的取值范围越大,可以认为转换的次数越多,也就是"越远"
 * int --> long 是转换一次
 * int --> float 需要经过long 转换2次
 * int --> double 转换3次
 *
 * 当然就近原则不是万能的,当没有"一个很好的标准,依据来明确谁近谁远时"
 * 就近原则就会失效
 * 比如
 * test(double a, int b)
 * test(int a, double b)
 *
 * @since 09:38
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo2 {
    public static void main(String[] args) {
        // test(100);
        test(0.1F);
        // Ambiguous method call: both 'Demo2.test(double, int)' and 'Demo2.test(int, double)' match
        // test(1,1);
    }

    // public static void test(int a){}
    public static void test(long a){}
    public static void test(float a){}
    public static void test(double a){}
    public static void test(double a, int b){}
    public static void test(int a, double b){}
}
